package com.xigua.数组;

import java.util.*;

/**
 * @author LiRongHua
 * @Title: ${file_name}
 * @Package ${package_name}
 * @Description: 给定一个长度为偶数的整数数组 arr，只有对 arr 进行重组后可以满足
 * “对于每个 0 <= i < len(arr) / 2，都有 arr[2 * i + 1] = 2 * arr[2 * i]” 时，返回 true；否则，返回 false。
 * @date 2022/4/110:18
 */
public class _954_二倍数对数组 {

    public static void main(String[] args) {
        canReorderDoubled(new int[]{4,-2,2,-4});
    }

    public static boolean canReorderDoubled(int[] arr) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i : arr) {
            map.put(i, map.getOrDefault(i, 0) + 1);
        }
        if (map.getOrDefault(0,0) %2 !=0) return false;
        List<Integer> list = new ArrayList<>();
        map.keySet().forEach(e->{
            list.add(e);
        });
        Collections.sort(list, (o1, o2) -> Math.abs(o1)-Math.abs(o2));
        for (Integer key : list) {
            if (map.getOrDefault(2*key,0) < map.get(key)){
                return false;
            }
            map.put(2*key,map.getOrDefault(2*key,0)-map.get(key));
        }
        return true;
    }

}
